<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数中的this</title>
    <script>

        /* 
            函数执行时，JS解释器每次都会传递进一个隐含的参数,这个参数就叫做this。

            this会指向一个对象，this所指向的对象，会根据我们调用函数方式的不同而不同。
                1.以函数的形式调用时，this指向的是window。(其实，函数就是window对象的方法，以函数调用，this就指向的是window对象)
                2.以方法的形式调用时，this指向的调用方法的对象。
            
            通过this,可以在方法中引用调用方法的对象。
        */

        function fn1() {
            console.log('fn1打印', this)
        }
        fn1() //这里全等于window.fn1()        // 直接调用函数,this指向的是window

        const obj = { name: '孙悟空' }

        //obj对象里有一个属性test1，其属性值为fn1函数
        obj.test1 = fn1
        // 调用fn1，fn1打印的是this
        obj.test1()     // this ===obj



        obj2 = { name: '猪八戒', test: fn1 }
        obj2.test() //调用fn1   // this ===obj2



        // 为两个对象添加一个方法，可以打印自己的名字。


        const obj3 = {
            name: '沙和尚',
            sayhello: function fn2() {
                console.log(this.name)
            }
        }
        const obj4 = { name: '唐僧' }

        obj3.sayhello()


//  this就是调用方法的对象，函数就是window对象的方法，通过函数调用时，this指向window！！！！


    </script>
</head>

<body>

</body>

</html>